/**
 * @author Q
 * @create 2025-07-01-19:07
 */

/**
 * Spring原理
 *      1.Bean作用域
 *      2.Bean生命周期
 *      3.Spring自动注解
 */
public class Test {
    public static void main(String[] args) {
        /**
         * 3.Spring自动注解
         */
    }
    public static void main2(String[] args) {
        /**
         * 2.Bean生命周期
         *      1. 实例化(为Bean分配内存空间)
         *      2. 属性赋值(Bean注⼊和装配, ⽐如 @AutoWired )
         *      3. 初始化
         *          a. 执⾏各种通知, 如 BeanNameAware , BeanFactoryAware ,ApplicationContextAware 的接⼝⽅法.
         *          b. 执⾏初始化⽅法
         *              ▪ xml定义 init-method
         *              ▪ 使⽤注解的⽅式 @PostConstruct
         *              ▪ 执⾏初始化后置⽅法( BeanPostProcessor )
         *      4. 使⽤Bean
         *      5. 销毁Bean
         *          a. 销毁容器的各种⽅法, 如 @PreDestroy , DisposableBean 接⼝⽅法, destroymethod.
         */
    }
    public static void main1(String[] args) {
        /**
         * 1.Bean作用域
         *      1.概念
         *          Bean在Spring框架中的某种行为模式
         *      2.Bean作用域
         *          在Spring中⽀持6种作⽤域，后4种在Spring MVC环境才⽣效
         *              1. singleton：单例作⽤域
         *                  多次访问, 得到的都是同⼀个对象, 并且 @Autowired 和 applicationContext.getBean()也是同⼀个对象.
         *              2. prototype：原型作⽤域（多例作⽤域）
         *                  观察ContextDog, 每次获取的对象都不⼀样(注⼊的对象在Spring容器启动时, 就已经注⼊了, 所以多次请求也不会发⽣变化)
         *              3. request：请求作⽤域
         *                  在⼀次请求中, @Autowired 和 applicationContext.getBean() 也是同⼀个对象.但是每次请求, 都会重新创建对象
         *              4. session：会话作⽤域
         *                  在⼀个session中, 多次请求, 获取到的对象都是同⼀个.
         *              5. Application: 全局作⽤域
         *                  在⼀个应⽤中, 多次访问都是同⼀个对象
         *              6. websocket：HTTP WebSocket 作⽤域
         */
    }
}
